﻿/*
剔除相关数 
Time Limit:1000MS  Memory Limit:32768K


Description:
一个数与另一个数如果含有相同数字和个数的字符，则称两数相关。
现有一堆乱七八糟的整数，里面可能充满了彼此相关的数，请你用一下手段，自动地将其剔除。 

Input:
每组数据前有一个N(<1000)，表示跟随的整数P(0<P<2^32)个数，若N为0，表示结束。 
Output:
按从小到大的顺序输出非相关数，若没有非相关数，则输出None。 
Sample Input:
8
213 667 3 213 43 34 677 2
3
322 232 232
0
Sample Output:
2 3 667 677
None
*/

#include <map>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
struct Irrelevant 
{
//	string value;	//unsigned value
	unsigned value;
	string intern;
	Irrelevant(const unsigned& value_, const string& intern_)
		:value(value_), intern(intern_)
	{
	}
	friend ostream& operator<<(ostream& os, const Irrelevant &irr)
	{
		os<<irr.value;
		return os;
	}
};
struct  Comparator
{
public:
	bool operator()(const Irrelevant& ir1, const Irrelevant& ir2) const
	{
		return ir1.intern<ir2.intern;
	}
};
typedef map<Irrelevant, bool, Comparator> IrrMap;
int main()
{
	for (unsigned n; cin>>n && n; )
	{
		IrrMap irrs;
	
		string tmp;	
		for (unsigned i=0; i<n; ++i)
		{					
			cin>>tmp;
			string intern(tmp);
			sort(intern.begin(), intern.end());
			unsigned value;
			stringstream ss(tmp);
			ss>>value;
			Irrelevant elem(value, intern);
			IrrMap::iterator pos=irrs.find(elem);
 			if(irrs.end()==pos)
			{
				irrs[elem]=true;			
			}
			else
				irrs[elem]=false;
		
		}
		vector<unsigned> irrv;
		irrv.reserve(irrs.size()+1);
		for (IrrMap::iterator it=irrs.begin(); it!=irrs.end(); ++it)
			if((*it).second)
				irrv.push_back((*it).first.value);
		if(irrv.size()>0)
		{
			sort(irrv.begin(), irrv.end());
			for (vector<unsigned>::size_type i=0, length=irrv.size()-1; i<length; ++i)
				cout<<irrv[i]<<" ";
			cout<<irrv.back()<<endl;
			//copy(irrv.begin(), irrv.end(), ostream_iterator<unsigned>(cout, " "));
		}
		else
			cout<<"None"<<endl;
	}
	return 0;
}
